var FormMethods = {};

import FormPcApi from '@/common/api/form/FormPcApi';
import { Util } from "@lowcode/jpaas-base-lib";
import { Formula } from '@lowcode/jpaas-form-lib';

/*
 * 日期计算 例如日期+天数=日期
 *
 * CALC_DATE({开始时间},{时间数},[单位],[方式]),
 * 单位可以是'Y(years)'、Q(quarters)'、'M(months)'、
    'w(weeks)'、'd(days)、'h(hours)'、
    'm(minutes)'、's(seconds)',
    方式可以是 ‘+’、‘-’
    日期格式: ‘YYYY-MM-DD HH:mm:ss’
 */
FormMethods.CALC_DATE = function (date, time, unit, mode, formatStr) {
    return Formula.CALC_DATE(date, time, unit, mode, formatStr)
}


/**
 * 两个时间计算。比如计算两个时间的时间差。
 *
 * @param   date1	开始时间
 * @param   date2	结束时间
 * @param   unit	单位可以是'Y(years)'、Q(quarters)'、'M(months)'、	'w(weeks)'、'd(days)、'h(hours)'、	'm(minutes)'、's(seconds)',
 * @param   fixed	精度 默认 为0
 * @param   amend	修正值
 */
FormMethods.DATEDIF = function (date1, date2, unit, fixed, amend) {
    return Formula.CALC_DATE(date, time, unit, mode, formatStr)
}


/**
 * 四舍五入函数。
 * @param  numberRound
 * @param  roundDigit
 */
FormMethods.NUM_ROUND = function (numberRound, roundDigit) {
    return Formula.ROUND(numberRound, roundDigit);
}


/**
 * 调用服务端脚本。
 */
FormMethods.invokeScript = function (alias, params, callback) {
    FormPcApi.invoke(alias, params).then(res => {
        if (callback) {
            callback(res);
        }
    })
}

/**
 * 调用服务端脚本。
 */
FormMethods.invokeScriptPromise = function (alias, params) {
    return FormPcApi.invoke(alias, params);
}

/**
 * 调用自定义查询
 */
FormMethods.invokeCustomQueryPromise = function (alias, params) {
    return FormPcApi.queryForJson(alias, { params: JSON.stringify(params) });
}
/**
 * 调用自定义查询。
 */
FormMethods.invokeCustomQuery = function (alias, params, callback) {
    FormPcApi.queryForJson(alias, { params: JSON.stringify(params) })
        .then(res => {
            if (res.success && callback) {
                callback(res.data);
            }
        })
}

/**
 * 调用第三方接口
 */
FormMethods.invokeInterfacePromise = function (apiKey, params) {
    return FormPcApi.executeInterfaceApi(apiKey, params);
}
/**
 * 调用第三方接口
 * @param apiId
 * @param params
 * @param callback
 */
FormMethods.invokeInterface = function (apiKey, params, callback) {
    FormPcApi.executeInterfaceApi(apiKey, params).then(res => {
        if (res.success && callback) {
            callback(res.data);
        }
    })
}

/**
 * 发送post请求。
 */
FormMethods.postJson = function (url, params) {
    return FormPcApi.postJson(url, params);
}

/**
 * 发送get请求。
 */
FormMethods.get = function (url, params) {
    return FormPcApi.get(url, params);
}

/**
 * 发送 post 请求。
 *  两种方式 ： 对象 {name:"RAY"} 传键值对 name=ray
 * @param url
 * @param params
 */
FormMethods.postForm = function (url, params) {
    return FormPcApi.postForm(url, params);
}

/**
 * 取双值的value.
 * @param json
 * @returns {*}
 */
FormMethods.getJsonValue = function (json) {
    if (!json) {
        return "";
    }
    return JSON.parse(json).value;
}


/**
 * 打开表单方案
 * @param alias     表单方案名称
 * @param title     标题
 * @param readonly  是否只读
 * @param pk        主键
 * @param params    将数据映射到表单 {}
 * @param destroy   回调函数 function(action){
 *
 * }
 */
FormMethods.openForm = function (alias, title, readonly, pk, params, destroy) {
    var params = {
        alias: alias,
        pk: pk,
        readOnly: readonly,
        params: params
    }
    this.openDialog('form', "", title, params, destroy);
}

/**
 * 打开列表。
 * @param alias     列表名称
 * @param params    传入参数，使用对象类型 参数键值数据例如 {user:"ray","Q_USER_S_EQ":"red"}
 * @param config    对象类型 {max:true,widthHeight:[data.width + 'px', data.height + 'px']}
 * @param destroy   回调函数 function(data){}
 */
FormMethods.openList = function (alias, params, config, destroy) {
    var parameter = "";
    if (params) {
        var aryParams = [];
        for (var key in params) {
            aryParams.push(key + "=" + params[key]);
        }
        parameter = aryParams.join("&");
    }

    var paramJson = { key: alias };
    if (parameter) {
        paramJson.params = parameter;
    }
    var obj = {
        params: paramJson,
        config: config
    }
    this.openDialog("list", "", "", obj, destroy)
}
/**
 * 打开一个自定义组件
 * @param url       这个组件路径是相对于 views目录的路径
 * @param title     标题
 * @param params    可以传递的参数
 * @param destroy   回调函数
 */
FormMethods.openDialogComponet = function (url, title, params, destroy) {
    this.openDialog('custom', url, title, params, destroy);
}
/**
 * 打开一个IFRAME 页面
 * @param url   URL地址
 * @param title 标题
 */
FormMethods.openDialogUrl = function (url, title) {
    this.openDialog('iframe', url, title);
}

/**
 * 打开对话框
 * @param settingType
 * @param url
 * @param title
 * @param params
 * @param destroy
 */
FormMethods.openDialog = function (settingType, url, title, params, destroy) {
    var params = {
        settingType: settingType,
        url: url,
        params: params,
        title: title,
        destroy: destroy
    }
    this.$bus.emit("formOpenEvent", params);
}

/**
 * 延迟处理函数。
 * @param callBack  需要执行的函数
 * @param timeout   延迟时间
 */
FormMethods.delay = function (callBack, timeout) {
    if (this.timer) {
        window.clearTimeout(this.timer);
        this.timer = 0;
    }
    this.timer = window.setTimeout(callBack, timeout);
}

/**
 * 获取Util工具。
 * @return
 */
FormMethods.getUtil = function () {
    return Util;
}

export default FormMethods;
